/*
 * Copyright (c) 2009, Maxim Taran. All Rights Reserved.
 */

package max.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

/**
 * User: MTaran
 * Date: 19.09.2008
 * Time: 11:08:02
 */

/**
 * В классе реализованы различные, часто используемые, методы работы с файлами.
 * @author Максим Таран
 */
public class Files {

    /**
     * Метод для удаления всех файлов и каталогов в указанном каталоге с любой вложенностью.
     * @param path путь к каталогу, в котором необходимо удалить все файлы и каталоги.
     * @return <code>true</code>, если удаление всех файлов завершилось успешно.
     *         <code>false</code> во всех остальных случаях.
     */
    public static boolean eraseFilesFromCatalog(String path) {
        File catalogpath = new File(path);
        return eraseFilesFromCatalog(catalogpath);
    }

    /**
     * Метод для удаления всех файлов и каталогов в указанном каталоге с любой вложенностью.
     * @param path объект типа File, указывающий на каталог в котором необходимо удалить
     * все файлы и каталоги.
     * @return <code>true</code>, если удаление всех файлов завершилось успешно.
     *         <code>false</code> во всех остальных случаях.
     */
    public static boolean eraseFilesFromCatalog(File path) {
        if (!path.exists() || !path.isDirectory())
            return false;
        boolean result = true;
        File[] filelist = path.listFiles();
        for (File file : filelist) {
            if (file.isDirectory())
                if (!eraseFilesFromCatalog(file) && result)
                    result = false;
            if (!file.delete() && result)
                result = false;
        }
        return result;
    }

    /**
     * Процедура для копирования файла.
     * @param source Путь к файлу, который надо скопировать
     * @param dest Полный путь файла назначения (вместе с именем файла)
     */
    public static void copyFile(String source, String dest) {
        try {
            FileChannel from = new FileInputStream(source).getChannel();
            FileChannel to = new FileOutputStream(dest).getChannel();
            to.transferFrom(from, 0, from.size());
            from.close();
            to.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //todo добавить класс для фильтрации файлов по маске.
}
